From: emellor@ewan Date: Wed, 28 Sep 2005 14:03:00 +0000 (+0100) Subject: Merged. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~16769^2~16^2~13 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=c8bdffa10a9b767592d19fa1d333f2fe5697a507;p=xen.git Merged. --- diff --git a/linux-2.6-xen-sparse/arch/xen/i386/mm/fault.c b/linux-2.6-xen-sparse/arch/xen/i386/mm/fault.c index 088b7e0e36..7ebbe25348 100644 --- a/linux-2.6-xen-sparse/arch/xen/i386/mm/fault.c +++ b/linux-2.6-xen-sparse/arch/xen/i386/mm/fault.c @@ -209,7 +209,10 @@ static void dump_fault_path(unsigned long address) { unsigned long *p, page; - page = __pa(per_cpu(cur_pgd, smp_processor_id())); + preempt_disable(); + page = __pa(per_cpu(cur_pgd, smp_processor_id())); + preempt_enable(); + p = (unsigned long *)__va(page); p += (address >> 30) * 2; printk(KERN_ALERT "%08lx -> *pde = %08lx:%08lx\n", page, p[1], p[0]); @@ -237,8 +240,13 @@ static void dump_fault_path(unsigned long address) { unsigned long page; + preempt_disable(); page = ((unsigned long *) per_cpu(cur_pgd, smp_processor_id())) [address >> 22]; + preempt_enable(); + + page = ((unsigned long *) per_cpu(cur_pgd, get_cpu())) + [address >> 22]; printk(KERN_ALERT "*pde = ma %08lx pa %08lx\n", page, machine_to_phys(page)); /* @@ -567,7 +575,9 @@ vmalloc_fault: pmd_t *pmd, *pmd_k; pte_t *pte_k; + preempt_disable(); pgd = index + per_cpu(cur_pgd, smp_processor_id()); + preempt_enable(); pgd_k = init_mm.pgd + index; if (!pgd_present(*pgd_k)) diff --git a/linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c b/linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c index 3a4db31d4d..d7ef1409cd 100644 --- a/linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c +++ b/linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c @@ -149,7 +149,9 @@ void dump_pagetable(unsigned long address) pmd_t *pmd; pte_t *pte; + preempt_disable(); pgd = (pgd_t *)per_cpu(cur_pgd, smp_processor_id()); + preempt_enable(); pgd += pgd_index(address); printk("PGD %lx ", pgd_val(*pgd)); @@ -252,7 +254,9 @@ static int vmalloc_fault(unsigned long address) /* On Xen the line below does not always work. Needs investigating! */ /*pgd = pgd_offset(current->mm ?: &init_mm, address);*/ + preempt_disable(); pgd = (pgd_t *)per_cpu(cur_pgd, smp_processor_id()); + preempt_enable(); pgd += pgd_index(address); pgd_ref = pgd_offset_k(address);